package com.iss.wyy.helper;

import com.iss.wyy.annotation.Autowirde;
import com.iss.wyy.util.ReflectionUtil;
import org.apache.commons.lang3.ArrayUtils;

import java.lang.reflect.Field;
import java.util.Map;

/**
 * 依赖注入
 */
public class IocHelper {

    static {
        //获取所有bean
        Map<Class<?>,Object> beanmap = BeanHelper.getBeanMap();
        for (Map.Entry<Class<?>, Object> oneBeanMap:beanmap.entrySet()){
            //循环分别获取每个bean对象所有属性
            Class<?> beanClass = oneBeanMap.getKey();
            Field[] fields = beanClass.getDeclaredFields();
            //判断是否bean里面有属性
            if(!ArrayUtils.isEmpty(fields)){
                for (Field field:fields) {
                    //判断使用了autowirde注解的属性
                    if(field.isAnnotationPresent(Autowirde.class)){
                        //获得该属性所属于哪个类的实例对象
                        Object instance0 = oneBeanMap.getValue();
                        //获取该属性的实例对象
                        Object instance1 = BeanHelper.getBean(field.getType());

                        //给autowirde注解的属性注入 赋值
                        ReflectionUtil.setField(instance0,field,instance1);
                    }
                }
            }
        }
    }
}
